package com.atguigu.crowd.mvc.config;

import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
import org.springframework.security.config.annotation.method.configuration.EnableGlobalMethodSecurity;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;

//表示当前类是一个配置类
@Configuration

//启用Web环境下权限控制功能
@EnableWebSecurity

//启用全局方法权限控制功能 	设置prePostEnabled = true。保证@PreAuthority、@PostAuthority、@PreFilter、@PostFilter生效
@EnableGlobalMethodSecurity(prePostEnabled = true)
public class WebAppSecurityConfig extends WebSecurityConfigurerAdapter {

	
	@Override
	protected void configure(AuthenticationManagerBuilder builder) throws Exception {
		
		//临时使用内存版登录模式测试代码
		builder.inMemoryAuthentication().withUser("tom").password("111").roles("ADMIN");
	}

	@Override
	protected void configure(HttpSecurity security) throws Exception {
		
		security
		.authorizeRequests()		//对资源进行授权
		.antMatchers("/admin/to/login.ht")	//针对登录进行设置
		.permitAll()						//无条件访问
		.antMatchers("/bootstrap/**")	//针对静态资源进行设置
		.permitAll()						//无条件访问
		.antMatchers("/crowd-js/**")	//针对静态资源进行设置
		.permitAll()						//无条件访问
		.antMatchers("/css/**")	//针对静态资源进行设置
		.permitAll()						//无条件访问
		.antMatchers("/fonts/**")	//针对静态资源进行设置
		.permitAll()						//无条件访问
		.antMatchers("/img/**")	//针对静态资源进行设置
		.permitAll()						//无条件访问
		.antMatchers("/jquery/**")	//针对静态资源进行设置
		.permitAll()						//无条件访问
		.antMatchers("/layer/**")	//针对静态资源进行设置
		.permitAll()						//无条件访问
		.antMatchers("/script/**")	//针对静态资源进行设置
		.permitAll()						//无条件访问
		.antMatchers("/ztree/**")	//针对静态资源进行设置
		.permitAll()						//无条件访问
		.anyRequest()		//其它任意请求
		.authenticated()	//认证后访问
		.and()
		.csrf()
		.disable()
		.formLogin()		//开启表单登录功能
		.loginPage("/admin/to/login.ht")		//指定登录页面
		.loginProcessingUrl("/security/admin/do/login.ht")  //指定表单里面处理登录请求的地址
		.defaultSuccessUrl("/to/main/page.ht")	//指定登录成功后前往的地址
		.usernameParameter("loginAcct")		//表单的账号对应的属性名
		.passwordParameter("userPswd")		//表单的密码对应的属性名
		.and()
		.logout()	//开启退出登录功能
		.logoutUrl("/security/admin/do/loginout.ht")
		.logoutSuccessUrl("/admin/to/login.ht")
		;
	}

	
}
